package pt.iscte.daam.ejb;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.apache.log4j.Logger;

import pt.iscte.daam.common.Constantes;
import pt.iscte.daam.json.UtilizadorJson;
import pt.iscte.daam.model.Arrendatario;
import pt.iscte.daam.model.Senhorio;
import pt.iscte.daam.model.Utilizador;
import pt.iscte.daam.servicos.Servicos;

@Stateless
@LocalBean
@Path(Servicos.servicoAutenticacao)
public class ServicoAutenticacao {
	
	private static final Logger logger = Logger.getLogger(ServicoAutenticacao.class);

	private static final String autenticar = "autenticar";

	private static final String registar = "registar";
	
	private static final String facebook = "facebook";

	@PersistenceContext(unitName = Constantes.persistenceContextUnitName, type = PersistenceContextType.TRANSACTION)
	EntityManager entityManager;

	@POST
	@Path(autenticar)
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public UtilizadorJson autenticar(Arrendatario utilizador) {
		UtilizadorJson retorno = new UtilizadorJson();
		try {
			Utilizador find = entityManager.find(Arrendatario.class, utilizador.getUtilizador());
			if(find != null){
				retorno.setAutenticado(true);
			} else {
				retorno.setMensagem("Utilizador inexistente");
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getStackTrace());
			retorno.setMensagem(e.getMessage());
		}
		return retorno;
	}
	
	@POST
	@Path(registar)
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public UtilizadorJson registar(Senhorio utilizador) {
		UtilizadorJson retorno = new UtilizadorJson();

		entityManager.persist(utilizador);

		retorno.setAutenticado(true);
		
		return retorno;
	}
	
	@POST
	@Transactional
	@Path(facebook)
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public UtilizadorJson facebook(Senhorio utilizador) {
		UtilizadorJson login;
		login = autenticar(utilizador);
		if(login.getAutenticado()){
			return login;
		} else {
			return registar(utilizador);
		}
	}

}
